package com.dms.modules.admin.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dms.modules.admin.entity.Admin;
import com.dms.modules.merchant.entity.Merchant;
import com.dms.modules.user.entity.User;
import org.springframework.security.core.userdetails.UserDetailsService;

import java.util.List;

/**
 * 管理员服务接口
 */
public interface AdminService extends IService<Admin>, UserDetailsService {
    
    /**
     * 创建管理员
     * @param admin 管理员信息
     * @return 创建的管理员
     */
    Admin createAdmin(Admin admin);
    
    /**
     * 更新管理员信息
     * @param admin 管理员信息
     * @return 更新后的管理员
     */
    Admin updateAdmin(Admin admin);
    
    /**
     * 删除管理员
     * @param adminId 管理员ID
     * @return 是否成功
     */
    boolean deleteAdmin(Long adminId);
    
    /**
     * 更新管理员状态
     * @param adminId 管理员ID
     * @param status 状态
     * @return 更新后的管理员
     */
    Admin updateStatus(Long adminId, Integer status);
    
    /**
     * 重置密码
     * @param adminId 管理员ID
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean resetPassword(Long adminId, String newPassword);
    
    /**
     * 修改密码
     * @param adminId 管理员ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean updatePassword(Long adminId, String oldPassword, String newPassword);
    
    /**
     * 获取管理员信息
     * @param adminId 管理员ID
     * @return 管理员信息
     */
    Admin getAdminInfo(Long adminId);
    
    /**
     * 根据用户名获取管理员
     * @param username 用户名
     * @return 管理员信息
     */
    Admin getAdminByUsername(String username);
    
    /**
     * 根据用户名获取管理员
     * @param username 用户名
     * @return 管理员信息
     */
    Admin getByUsername(String username);
    
    /**
     * 分页查询管理员列表
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键词
     * @return 管理员分页列表
     */
    IPage<Admin> getAdminPage(Integer page, Integer size, String keyword);
    
    /**
     * 更新管理员登录信息
     * @param adminId 管理员ID
     * @param ip 登录IP
     */
    void updateLoginInfo(Long adminId, String ip);
    
    /**
     * 获取商户列表
     */
    List<Merchant> getMerchantList();
    
    /**
     * 更新商户状态
     */
    void updateMerchantStatus(Long id, Integer status);
    
    /**
     * 获取用户列表
     */
    List<User> getUserList();
    
    /**
     * 更新用户状态
     */
    void updateUserStatus(Long id, Integer status);
} 